/****************************************************************
 * 实验板：  创客海51单片机实验板，以STC89C52单片机为核心，适用于51系列单片机
 * 源代码：  源码经过精心调试，逐行注释，倾心录制高品质视频教程，制作PPT文档教程
 * 温馨提示：需要开源例程源码，请到创客海技术论坛学习、讨论、下载！
 * 淘宝店铺：创客海社区一号店/二号店，希望您支持，感谢您的惠顾！
 * 程序目的：学习点阵屏显示应用,学习数组，
 * 函数功能: 显示一个A，共阴极数码管
*******************************************************************************/
#include "NewStartC51.h"
#include "INTRINS.h"
/*******************************************************************************
 * 延时子函数 : Delay1ms
 * 函数功能	 : 延时1ms
 *******************************************************************************/
void Delay1ms(unsigned int Xms) //@11.0592MHz
{
    while (Xms--)
    {
        unsigned char i, j;
        ;
        i = 2;
        j = 199;
        do
        {
            while (--j)
                ;
        }
        while (--i);
    }
}

/*******************************************************************************
* 点阵屏子程序  : XDisplay
* 函数功能	    : 列数据DisData形参，第几列Sit形参
*                 把每一列要显示的数据，装在数组里，整幅画面共有8列，就是8个数据
				  从左边第一列开始显示，向右扫描
*******************************************************************************/
void XDisplay(unsigned char DisData, Sit)
{
    P0 = 0xff; //送显示位置，列码Sit，让数据显示在第几列
    CS88 = 1;
    CS88 = 0; //锁住位码到UB（74HC573）内

    P0 = DisData; //送其中1列要显示的数据,
    DUAN = 1;
    DUAN = 0; //锁住数据到UA（74HC573）内

    P0 = ~(0x80 >> Sit); //送显示位置，列码Sit，让数据显示在第几列
    CS88 = 1;
    CS88 = 0; //锁住位码到UB（74HC573）内
}

/*******************************************************************************
 * 主程序    : 8*8点阵屏显示子程序
 * 函数功能	: 动态扫描点阵屏显示，调用点阵屏列显示子程序，2个形参
 *             从左边第一列开始显示，向右扫描
 *             显示的字模数据，用字模生成软件，文件夹里给了
 *             数组的数据类型 idata xdata code 定义方法
 *******************************************************************************/
void main()
{
    newstart_init();
    while (1)
    {
        unsigned char Num[]= {0x00,0x3E,0x48,0x88,0x48,0x3E,0x00,0x00}; //显示“A”，要8个数据
        unsigned char i;

        for (i = 0; i < 8; i++)
        {
            XDisplay(Num[i], i); //显示“A”的第一列数据取出来
            Delay1ms(0);		 //延时0毫秒后，去显示下一列，不停的扫描
        }
    }
}